package io.lvdaxian.java.handwriting.D001;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author lihaohao
 * @description 两个线程 轮流打印数字 到 200
 */
public class D001Test001
{
    // 使用 volatile 修饰符，线程的可见性
    // 但是这里没有用 volatile，因为synchronized 也是可以保证线程的可见性
    private static boolean flag = true;

    public static void main(String[] args)
    {
        AtomicInteger count = new AtomicInteger(1);
        // 线程 1
        new Thread(() -> {
            while (count.get() <= 200) {
                if (flag) {
                    System.out.println(Thread.currentThread().getName() + ": " + count.getAndIncrement());
                    flag = false;
                }
            }
        }).start();

        // 线程 2
        new Thread(() -> {
            while (count.get() <= 200) {
                if (!flag) {
                    System.out.println(Thread.currentThread().getName() + ": " + count.getAndIncrement());
                    flag = true;
                }
            }
        }).start();
    }
}
